--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / pwa / swCachePolicy.js
Displaying Raw • Download
meshchatx/src/frontend/js/pwa/swCachePolicy.js master (b89dc9e6) Text, 3.38 KB
T8b949e// SPDX-License-Identifier: 0BSD
T8b949e/** Prefix for versioned Cache Storage buckets. */
Tff7b72export Tff7b72const Te6edf3SHELL_CACHE_PREFIX Tff7b72= Ta5d6ff"meshchatx-shell-"Tb4b4b4;
T8b949e/** Default navigation network-first timeout in milliseconds. */
Tff7b72export Tff7b72const Te6edf3NAV_NETWORK_TIMEOUT_MS Tff7b72= T79c0ff2000Tb4b4b4;
T8b949e/**
* @param {string} buildId
* @returns {string}
*/
Tff7b72export Tff7b72function Te6edf3cacheNameForBuildTb4b4b4(Te6edf3buildIdTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3id Tff7b72= Tffa657StringTb4b4b4(Te6edf3buildId Tff7b72|| Ta5d6ff"dev"Tb4b4b4)Tb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/[^a-zA-Z0-9._-]/gTb4b4b4, Ta5d6ff"_"Tb4b4b4)Tb4b4b4;
Tff7b72return Ta5d6ff`Tffd700${Te6edf3SHELL_CACHE_PREFIXTffd700}Ta5d6ffvTffd700${Te6edf3idTffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} pathname
* @returns {boolean}
*/
Tff7b72export Tff7b72function Te6edf3isApiPathTb4b4b4(Te6edf3pathnameTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3path Tff7b72= Tffa657StringTb4b4b4(Te6edf3pathname Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3path Tff7b72=== Ta5d6ff"/api" Tff7b72|| Te6edf3pathTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/api/"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Vite content-hashed build assets under /assets/.
* @param {string} pathname
* @returns {boolean}
*/
Tff7b72export Tff7b72function Te6edf3isHashedAssetPathTb4b4b4(Te6edf3pathnameTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3path Tff7b72= Tffa657StringTb4b4b4(Te6edf3pathname Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3path Tff7b72=== Ta5d6ff"/assets" Tff7b72|| Te6edf3pathTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/assets/"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Static shell helpers that may use stale-while-revalidate.
* @param {string} pathname
* @returns {boolean}
*/
Tff7b72export Tff7b72function Te6edf3isShellHelperPathTb4b4b4(Te6edf3pathnameTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3path Tff7b72= Tffa657StringTb4b4b4(Te6edf3pathname Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3path Tff7b72=== Ta5d6ff"/boot-theme.js" Tff7b72|| Te6edf3path Tff7b72=== Ta5d6ff"/manifest.json"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3path Tff7b72=== Ta5d6ff"/favicons" Tff7b72|| Te6edf3pathTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/favicons/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Ta5d6ff/favicon/iTb4b4b4.Te6edf3testTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {Request} request
* @returns {boolean}
*/
Tff7b72export Tff7b72function Te6edf3isNavigationRequestTb4b4b4(Te6edf3requestTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3request Tff7b72|| Tff7b72typeof Te6edf3request Tff7b72!== Ta5d6ff"object"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3requestTb4b4b4.Te6edf3mode Tff7b72=== Ta5d6ff"navigate"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3dest Tff7b72= Te6edf3requestTb4b4b4.Te6edf3destinationTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3dest Tff7b72=== Ta5d6ff"document"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3accept Tff7b72= Te6edf3requestTb4b4b4.Te6edf3headersTff7b72?Tb4b4b4.Te6edf3getTff7b72?Tb4b4b4.Tb4b4b4(Ta5d6ff"accept"Tb4b4b4) Tff7b72|| Ta5d6ff""Tb4b4b4;
Tff7b72return Tff7b72typeof Te6edf3accept Tff7b72=== Ta5d6ff"string" Tff7b72&& Te6edf3acceptTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"text/html"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* True when the service worker must not use Cache Storage for this request.
* @param {Request} request
* @param {URL} [url]
* @returns {boolean}
*/
Tff7b72export Tff7b72function Te6edf3shouldBypassCacheTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3urlTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3request Tff7b72|| Tb4b4b4(Te6edf3requestTb4b4b4.Te6edf3method Tff7b72!== Ta5d6ff"GET" Tff7b72&& Te6edf3requestTb4b4b4.Te6edf3method Tff7b72!== Ta5d6ff"HEAD"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3pathname Tff7b72= Ta5d6ff"/"Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3url Tff7b72&& Tff7b72typeof Te6edf3urlTb4b4b4.Te6edf3pathname Tff7b72=== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Te6edf3pathname Tff7b72= Te6edf3urlTb4b4b4.Te6edf3pathnameTb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3requestTb4b4b4.Te6edf3url Tff7b72=== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3pathname Tff7b72= Tff7b72new Te6edf3URLTb4b4b4(Te6edf3requestTb4b4b4.Te6edf3urlTb4b4b4)Tb4b4b4.Te6edf3pathnameTb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3isApiPathTb4b4b4(Te6edf3pathnameTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pathname Tff7b72=== Ta5d6ff"/ws" Tff7b72|| Te6edf3pathnameTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/ws/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pathname Tff7b72=== Ta5d6ff"/service-worker.js"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72trueTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72falseTb4b4b4;
Tb4b4b4}
T8b949e/**
* Classify a same-origin GET for shell caching strategy selection.
* @param {Request} request
* @param {URL} url
* @returns {"bypass"|"asset"|"navigation"|"shell-helper"|"network-only"}
*/
Tff7b72export Tff7b72function Te6edf3classifyShellRequestTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3urlTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3shouldBypassCacheTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"bypass"Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3pathname Tff7b72= Te6edf3urlTb4b4b4.Te6edf3pathnameTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3isHashedAssetPathTb4b4b4(Te6edf3pathnameTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"asset"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3isNavigationRequestTb4b4b4(Te6edf3requestTb4b4b4) Tff7b72|| Te6edf3pathname Tff7b72=== Ta5d6ff"/" Tff7b72|| Te6edf3pathname Tff7b72=== Ta5d6ff"/index.html"Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"navigation"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3isShellHelperPathTb4b4b4(Te6edf3pathnameTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"shell-helper"Tb4b4b4;
Tb4b4b4}
Tff7b72return Ta5d6ff"network-only"Tb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────